local function add_semicolon_to_proto()
    -- 只处理 proto 文件
    if vim.bo.filetype ~= "proto" then
        return
    end

    -- 保存当前光标位置
    local cursor_pos = vim.api.nvim_win_get_cursor(0)

    -- 获取所有行
    local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)

    -- 需要添加分号的行类型模式
    local patterns = {
        "enum%s+",
        "rpc%s+",
        "optional%s+",
        "required%s+",
        "repeated%s+",
        "map%s+",
        "oneof%s+",
        "extend%s+",
        "extensions%s+",
        "reserved%s+",
        "package%s+",
        "import%s+",
        "syntax%s*=",
    }

    local changed = false

    -- 处理每一行
    for i, line in ipairs(lines) do
        -- 跳过空行和已有分号的行
        if #line > 0 and not line:match ";%s*$" then
            -- 检查是否需要添加分号
            for _, pattern in ipairs(patterns) do
                if line:match("^%s*" .. pattern) then
                    lines[i] = line .. ";"
                    changed = true
                    break
                end
            end
        end
    end

    -- 如果有修改，更新缓冲区
    if changed then
        vim.api.nvim_buf_set_lines(0, 0, -1, false, lines)
        -- 恢复光标位置
        vim.api.nvim_win_set_cursor(0, cursor_pos)
        vim.notify("Added missing semicolons to .proto file", vim.log.levels.INFO)
    end
end

-- 创建自动命令组（避免重复创建）
local proto_group = vim.api.nvim_create_augroup("ProtoAutoSemicolon", { clear = true })

-- 在保存前触发
vim.api.nvim_create_autocmd("BufWritePre", {
    group = proto_group,
    pattern = "*.proto",
    callback = add_semicolon_to_proto,
    desc = "Auto add semicolons to proto files",
})
